Computing with encrypted values, not using operators which reveal their functionality, may be realized with a table driven approach. The program code, i.e. its operation, can be hidden through the use of look-up tables. Applying these tables to encrypted data gives an encrypted result, the outcome of the hidden operation. However, recognizing operators like comparisons (<, =, . . . ) is fairly easy since those instructions are limited in number, typically result in a change in the control flow, and their outcome is of type encrypted Boolean. If this encrypted Boolean guards a conditional operation, e.g. in the case of an if-then or if-then-else construct, an attacker could recognize from the control flow aspects of the operation. Further, an attacker could create an ordering on the encrypted values that were compared. Eventually, this could lead to breaking the encryption.
In a software program it is often necessary to perform a comparison. For instance, to check if a certain threshold value has been reached or if some input is equal to a predetermined value. In obfuscated programs, such comparisons may help an attacker to break the encoding.
U.S. Pat. No. 7,809,135 B2 discloses methods and systems related to increasing the cryptographic security of keys used by software with cryptographic functions. This is done by increasing the mathematical complexity of the software. The components and functions used by the software are first determined and, using these components, functions, and the data exchanged between them, the software is made more resistant to analysis. The methods used in increasing analytical resistance are grouped into 3 general types: adjusting the information exchanged between the components, replacing some components with different but related components, and adjusting the data flow between the components.